Skip to content

fix: Dashboard loses the selected chat on newer Gateways - #2125

Merged
bkudiess merged 3 commits into
openclaw:mainfrom
bkudiess:bkudiess-dashboard-chat-selection
Nov 12, 2026
Merged

bkudiess merged 3 commits into
openclaw:mainfrom
bkudiess:bkudiess-dashboard-chat-selection

Conversation

@bkudiess

Copy link
Copy Markdown
Collaborator

What Problem This Solves

Fixes: Dashboard opens home instead of the selected chat when the connected Gateway is not on an exact release allowlist.

User Impact

User impact: Dashboard and search links retain the full selected chat identity without requiring a Companion update for each Gateway release. Settings, Skills and model links also stop depending on release allowlists.

Draft: live browser selection remains unverified. Older Gateways without /systems cannot provide an equivalent Systems page; links no longer substitute the unrelated Devices settings page.

Why This Change Was Made

Use the released /chat?session=<encoded-full-session-key> contract and let the Gateway resolve its session URL grammar and configured main key. Remove the remaining web-routing release checks and obsolete compatibility warning while retaining advertised-method checks, operator permissions, offline restrictions and stale-result fencing.

Ownership stays with HubSearchCatalog for route selection, WorkspaceWindow for current context, and the existing Dashboard launcher/browser for credential-safe dispatch. No parallel connection or launch owner is introduced.

Evidence

The original release-gated Settings regression failed for five non-allowlisted version inputs before the repair. The Systems correction separately demonstrated two intended pre-fix failures. After the final fix, all 273 focused search, Dashboard and navigation tests pass, including exact session-key encoding, UUID/custom-main cases, mounted base paths and fragment-token preservation.

Read-only inspection of upstream openclaw/openclaw main at 87c10f5d4a58bc1e5b764a4f13ffa04d5f00878f confirms the query parser, bootstrap normalization, and web route table. This is source compatibility evidence, not execution of upstream tests or an installed Gateway.

Independent Copilot rubber-duck reviews used Claude Opus 5.5 and GPT-6 Astra at high reasoning, with long context requested for Astra. Both completed implementation-first and documentation/producer-contract stages over the full 11-file candidate. No P0/P1 issues were found. Opus identified one P2 Systems-versus-Devices mismatch, which was confirmed and fixed with the user's approval; Astra reported no actionable findings. The small post-review correction was checked directly and revalidated, not represented as a second dual-model review. No further simplification edits were needed.

Change Type

  • Bug fix
  • Feature
  • Refactor
  • Docs or instructions
  • Tests or validation
  • Security hardening
  • Chore or infrastructure

Scope

  • Tray or WinUI UX
  • Windows node capability
  • Local MCP or winnode
  • Gateway, connection, or pairing
  • Setup or onboarding
  • Permissions, privacy, or security
  • Tests, CI, or docs

Local MCP is affected only through the shared navigation-search catalog. No command registration, protocol or permission surface changes.

Required proof pools

  • windows-winui-interactive: exercise Dashboard from a selected chat and Settings in the isolated current-build app, then verify the browser's selected destination. Not run.

Validation

Final local validation ran on Windows ARM64 with .NET 10. Tests executed before commit against the exact source now committed in this PR. No source changes followed these runs.

Command Result
.\build.ps1 Passed, full Debug ARM64 repository build
dotnet test .\tests\OpenClaw.Tray.Tests\OpenClaw.Tray.Tests.csproj --no-restore --filter 'FullyQualifiedName~HubSearch|FullyQualifiedName~GatewayDashboard|FullyQualifiedName~WorkspaceNavigation' --verbosity quiet -nr:false Passed: 273, failed: 0, skipped: 0
dotnet test .\tests\OpenClaw.Shared.Tests\OpenClaw.Shared.Tests.csproj --no-restore --verbosity quiet -nr:false Passed: 5,847, failed: 0, skipped: 29
dotnet test .\tests\OpenClaw.Tray.Tests\OpenClaw.Tray.Tests.csproj --no-restore --verbosity quiet -nr:false Passed: 6,307, failed: 0, skipped: 0
dotnet test .\tests\OpenClaw.WinNode.Cli.Tests\OpenClaw.WinNode.Cli.Tests.csproj --no-restore --verbosity quiet -nr:false Passed: 141, failed: 0, skipped: 0
.\scripts\validate-docs.ps1 Passed: 73 Markdown files
git diff --check Passed

OPENCLAW_REPO_ROOT pointed at the task worktree. Managed test shells cleared inherited integration/GPU opt-ins and conflicting state/profile overrides; Tray tests used their existing isolated-profile initializer.

The CLI suite initially lacked restore assets. A restore-enabled run passed, followed by the passing final --no-restore run listed above. The 29 ordinary Shared skips do not count as custom proof.

Real Behavior Proof

  • Environment tested: Windows ARM64, Debug managed build and automated owner tests only.
  • PR head or commit tested: c7c2960f0e1b4789665ca542736a53e27389cf21, source-equivalent to the tested uncommitted candidate on base 2a23706991584d5bcb813f40deda4cd2883667bc. The manually recorded candidate patch SHA-256 was 991813334C17A9FC14A187C30537CE9D66308B4709A79E622F8970902FB7BD4B.
  • Exact steps or command run: focused command and full suites under Validation. These are automated URL-dispatch checks, not a live browser run.
  • Evidence after fix: 273 focused tests pass; the launcher-boundary tests preserve the complete selected session key, base path and authentication fragment.
  • Observed result: automated dispatch and producer-source contracts agree. Correct rendered chat selection in the rebuilt Companion/browser has not been observed.
  • Screenshot or artifact links verified? (Yes/No/N/A): N/A. No runtime screenshots or public runtime artifacts.
  • Not verified or blocked: current-build native UI, real browser selection against an installed Gateway, and live MCP discovery/invocation of the changed search output. No shared app or Gateway was replaced or restarted. CI and the declared interactive proof remain outstanding.

Security Impact

  • New permissions or capabilities? (Yes/No): No.
  • Secrets or tokens handling changed? (Yes/No): No.
  • New or changed network calls? (Yes/No): No new RPCs or HTTP clients. Existing browser-navigation URLs change as described above.
  • Command or tool execution surface changed? (Yes/No): No. Shared search navigation targets change, not command registration or execution authority.
  • Data access scope changed? (Yes/No): No.
  • If any answer is Yes, explain the risk and mitigation: N/A. Existing shared-token-only browser export, query escaping, permission checks and search lifecycle fences remain.

Compatibility and Migration

  • Backward compatible? (Yes/No): Yes for the established session-query and web-route contracts. This does not guarantee every destination exists in every Gateway build; older Gateways lacking /systems cannot provide that page.
  • Config or environment changes? (Yes/No): No.
  • Migration needed? (Yes/No): No.
  • If yes, list the exact upgrade steps: N/A.

Review Conversations

  • I replied to or resolved every bot review conversation addressed by this PR.
  • I left unresolved only conversations that still need maintainer judgment.

No existing PR review conversations at creation. Review and CI results remain pending.

@clawsweeper

clawsweeper Bot commented Nov 12, 2026 •

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@clawsweeper clawsweeper Bot added clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-environment Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. P2 Normal priority bug or improvement with limited blast radius. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-environment Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. labels Nov 12, 2026
@clawsweeper

clawsweeper Bot commented Nov 12, 2026

Copy link
Copy Markdown

Codex review: needs maintainer review before merge.

What this changes

This PR preserves selected chat identities through Gateway-owned query URLs and removes release allowlists from Dashboard navigation.

Example: Open Dashboard while viewing agent:work:12345678 on Gateway 2026.11.1.

  • Before: The release check rejects contextual routing and opens Dashboard home.
  • After: Companion dispatches /chat?session=agent%3Awork%3A12345678 for the Gateway to resolve.

Review scores

Measure Result What it means
Overall readiness 🧂 unranked krab (1/6) The implementation is focused and source-supported, but the required shipped-entry-point proof is absent.
Proof confidence 🧂 unranked krab (1/6) Real behavior proof is not required for maintainer- or bot-authored pull requests.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Product

Kind: Bug fix · Worth it: Yes · Fix scope: Complete
User problem: Opening Dashboard from a selected conversation on a newer Gateway loses the selected conversation.
Reason: The feature-history owner authored this repair, which restores contextual navigation and removes recurring per-release maintenance.

Merge readiness

✅ Ready for maintainer review

Keep open: main still discards contextual Dashboard destinations on newer Gateways, and this maintainer-authored PR addresses that source-confirmed defect without an actionable introduced code defect.

Priority: P2
Reviewed head: c7c2960f0e1b4789665ca542736a53e27389cf21

Before merge

None.

Findings

None.

Tests

  • Missing end-to-end proof: Show current-head Companion footer/shortcut and search handoffs arriving at the exact selected chat and Settings destination in an installed Gateway browser, plus live MCP discovery and changed search output.
Agent review details

How this fits together

Workspace and search supply the selected destination to HubSearchCatalog, then the existing Dashboard launcher builds a credential-safe URL and dispatches it to the browser.

flowchart LR
  A[Workspace context] --> C[HubSearchCatalog]
  B[Search results] --> C
  C --> D[Dashboard launcher]
  D --> E[Browser]
  E --> F[Gateway route resolver]
Loading

Technical review

Best possible solution:

Keep route selection in HubSearchCatalog and let the Gateway resolve the complete session key through its established query contract.

Do we have a high-confidence way to reproduce the issue?

Main deterministically rejects contextual routing for Gateway 2026.11.1 through its exact 2026.10.9 allowlist; no runtime reproduction was performed during this read-only review.

Is this the best way to solve the issue?

The patch addresses the cause with the existing catalog and launcher, preserves connection and permission admission, and delegates URL grammar to the authoritative Gateway implementation.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 2a2370699158.

Provenance checked

  • Dashboard release allowlists and compatibility warning changes intended behavior with a stated reason (4ea07e8: The shared-search feature deliberately limited navigation to verified Dashboard versions and separately admitted the proved Skills route.)
  • Contextual Workspace Dashboard navigation changes intended behavior with a stated reason (c714954: The contextual Dashboard feature reused the existing compatibility helpers and opened home when no verified counterpart was available.)
  • Systems counterpart changes intended behavior with a stated reason (f059221: The Systems feature replaced Instances while preserving legacy navigation and separate web administration; this PR explains why Devices is not an equivalent Systems destination.)

Testing

Proof path: unit tests only.

Security

None.

Evidence

What I checked:

Likely related people:

  • Barbara Kudiess: Raw commit c714954 adds src/OpenClaw.Tray.WinUI/Windows/WorkspaceWindow.xaml.cs:1051 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: c714954e6677; files: src/OpenClaw.Tray.WinUI/Windows/WorkspaceWindow.xaml.cs)

Preflight source

Source unknown. Source comparison at the observed PR snapshot only. Completion is self-reported; body, policy, tests, execution, and report bytes are not verified.

Review metrics

Metric Value Why it matters
Production and test delta Production +29/-86; tests +117/-74; documentation +20/-2 Removing duplicated URL grammar and release checks reduces production code while preserving focused routing and launcher-boundary coverage.

Labels

Label changes:

  • add P2: The defect loses navigation context while Dashboard and native chat remain usable.
  • add rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🧂 unranked krab and patch quality is 🐚 platinum hermit.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.

Label justifications:

  • P2: The defect loses navigation context while Dashboard and native chat remain usable.
  • rating: 🧂 unranked krab: Overall readiness is 🧂 unranked krab; proof is 🧂 unranked krab and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.

Rating scale

6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior.

Workflow

ClawSweeper edits this one comment on every review. Comment @clawsweeper re-review for a fresh review only. Repair and merge execution lanes are retired.

Reviewed November 12, 2026, 2:18 AM ET / 07:18 UTC.

@bkudiess
bkudiess marked this pull request as ready for review November 12, 2026 07:34
bkudiess and others added 2 commits November 12, 2026 01:11
Use the released full-session-key query contract for chat handoff and remove web-routing release allowlists. Preserve search admission and credential safeguards, and route Systems to its matching web page.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…e doc

Remove Search_Compatibility from all locales now that its last reader is gone, and state that /systems matches the native Open in web action only when the Gateway reports environments; older Gateways open their default view for routes they lack.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@bkudiess
bkudiess force-pushed the bkudiess-dashboard-chat-selection branch from eb3f229 to e801464 Compare November 12, 2026 09:23
The Settings chrome proof invoked SettingsSearch with an immediate UIA lookup and failed intermittently in Dark theme. Use the existing InvokeWhenEnabledAsync readiness helper, matching the pending openclaw#2048 change.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@bkudiess
bkudiess merged commit 753b8af into openclaw:main Nov 12, 2026
46 of 48 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P2 Normal priority bug or improvement with limited blast radius. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant